package utils;

import java.io.*;
import server.Singleton;
import comun.constantes.SCRIPT_BASH;

public class ProcesosEnLinux{
		
  public ProcesosEnLinux() {
  }

  public static boolean comprimir(String nombreArchivo,String pathCarpetasArchivosAComprimir,
		  				String rutaContenedoraCarpetaAcomprimir,String fechaComprimir) throws Exception{
	  	  
	  String rutaDestinoConNombreArchivoResultadoZip = Singleton.HOME_DIR_TEMPORAL+nombreArchivo+"-"+fechaComprimir+".zip";
	  
	  String sentenciaZIP = SCRIPT_BASH.COMPRIMIR_ZIP+" "+rutaContenedoraCarpetaAcomprimir+" "+
	  rutaDestinoConNombreArchivoResultadoZip+" "+pathCarpetasArchivosAComprimir;
	  
	  int exitCode = ejecutarProcesoEnLinux(sentenciaZIP);
	  if(exitCode==0){
		  System.out.println("OK el zipeo");
		  return true;
	  }else{
		  System.out.println("Algo mal hubo en el comprimir con codigo de error:"+exitCode);
		  return false;
	  }
  }
  
  public static boolean copiarCP(String archivoOrigen, String carpetaDestino) throws Exception{  
	  	  
	  String sentencia = SCRIPT_BASH.COPIAR_CP+" "+archivoOrigen+" "+carpetaDestino;
	  
	  int exitCode = ejecutarProcesoEnLinux(sentencia);
	  if(exitCode==0){
		  System.out.println("OK");
		  return true;
	  }else{
		  System.out.println("Algo mal hubo en el COPIAR con codigo de error:"+exitCode);
		  return false;
	  }
  }
  
  public static boolean permisoCarpetaCHMOD(String carpeta) throws Exception{
	  String permiso = "777";
  	  
	  String sentencia = SCRIPT_BASH.PERMISOS_CARPETA+" "+permiso+" "+carpeta;
	  
	  int exitCode = ejecutarProcesoEnLinuxSinEsperar(sentencia);
	  if(exitCode==0){
		  System.out.println("OK");
		  return true;
	  }else{
		  System.out.println("Algo mal hubo al otorgar permisos con codigo de error:"+exitCode);
		  return false;
	  }
  }
  
  public static boolean restartTomcat() throws Exception{  
  	  
	  String sentencia = SCRIPT_BASH.RESTART_TOMCAT;
	  
	  int exitCode = ejecutarProcesoEnLinux(sentencia);
	  if(exitCode==0){
		  System.out.println("OK");
		  return true;
	  }else{
		  System.out.println("Algo mal hubo en el RESTART del TOMCAT con codigo de error:"+exitCode);
		  return false;
	  }
  }
  
  public static boolean moverORenombrarMV(String archivoOrigen, String carpetaDestino) throws Exception{	  
  	  
	  String sentencia = SCRIPT_BASH.MOVER_MV+" "+archivoOrigen+" "+carpetaDestino;
	  
	  int exitCode = ejecutarProcesoEnLinux(sentencia);
	  if(exitCode==0){
		  System.out.println("OK");
		  return true;
	  }else{
		  System.out.println("Algo mal hubo en el MOVER O RENOMBRAR con codigo de error:"+exitCode);
		  return false;
	  }
  }
  
  public static boolean eliminarRM_ZipEnTemporal() throws Exception{  
  	  
	  String sentencia = SCRIPT_BASH.ELIMINAR_RM+" "+Singleton.HOME_DIR_TEMPORAL+" *.zip";
	  
	  ejecutarProcesoEnLinuxSinEsperar(sentencia);
	  return true;
  }
  
  public static int ejecutarProcesoEnLinux(String sentencia) throws Exception{
		
		  System.out.println("Ejecutando linea de comando:"+sentencia);	
		  
//		  Ejecuto la sentencia, como si lo haria desde consola en UNIX
		  Process process = Runtime.getRuntime().exec(sentencia);
		  
//		  Espera hasta que el proceso termine
		  process.waitFor();
		  System.out.println("Termino de Esperar...");
		  
//		  Codigo de salida del proceso.
		  return process.exitValue();
		  
	  
  }
  
  public static int ejecutarProcesoEnLinuxSinEsperar(String sentencia) throws Exception{
		
	  System.out.println("Ejecutando linea de comando:"+sentencia);	
	  
//	  Ejecuto la sentencia, como si lo haria desde consola en UNIX
	  Runtime.getRuntime().exec(sentencia);
  
	  //No retorno el codigo del proceso porque al no usar el wait, no sabemos si termina.
	  return 1;
	  
  
}
  
  public static int ejecutarProcesoEnLinuxConEsperaDeterminada(String sentencia) throws Exception{

	  System.out.println("Ejecutando linea de comando:"+sentencia);	

	  //	  Ejecuto la sentencia, como si lo haria desde consola en UNIX
	  Process process = Runtime.getRuntime().exec(sentencia);

	  long tiempoEspera = (1000*60)*2;//2 minutos
	  
	  try{
		  process.wait(tiempoEspera);
		  
		  System.out.println("Termino de Esperar...");
		  //Codigo de salida del proceso.
		  return process.exitValue();
	  }catch(IllegalArgumentException e){// if the value of timeout is negative.
		  // TODO Auto-generated catch block
		  return -1000;
	  }catch (IllegalMonitorStateException e){//if the current thread is not the owner of the object's monitor
		  // TODO: handle exception
		  return -2000;
	  }catch (InterruptedException e){//if another thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
		// TODO: handle exception
		  return -3000;
	  }catch (Exception e) {
		  // TODO: handle exception
		  return -4000;
	  }




}

			
  public static void main(String[] argv) throws IOException {	  	  
	  //realizarAntivirus_ok("/home/ariel06/pruebaVirus/", "", "");
	  //realizarAntivirus_ok("/home/ariel06/pruebaVirus/boot.ini",true, "boot.ini");
	  String ruta = "/usr/share/tomcat4/common/lib/comandosBash/materiales/";
	  System.out.println(ruta.indexOf("/materiales/"));
	  System.out.println(ruta.substring(0,ruta.length()-12));
	  System.out.println(ruta.replaceFirst("/materiales/",""));
  }
  
}

